STM32F103C8T6调试CAN通讯

您所在的位置:网站首页 stm32f103c8t6iic 能用PB8 PB9 STM32F103C8T6调试CAN通讯

STM32F103C8T6调试CAN通讯

2023-11-09 05:21| 来源: 网络整理| 查看: 265

这是我这两天做的一个功能,有一些细节没注意,导致移植没通,现在记下来。

一、硬件部分

    STM32F103C8T6 :2个,记为STM32(1),STM32(2)

    TJA1050(CAN模块):2个,记为TJA(1),TJA(2)

    STM32(1)的RX接TJA(1)的RX,TX接TX。TJA(1)的CAN_H接另一个TJA(2)的CAN_H,CAN_L接CAN_L。然后TJA(2)的RX接STM32(2)的RX,TX接TX。

 

 

二、软件部分

注释:软件参考了网上的一些朋友的代码,如果雷同,纯属参考学习,谢谢!

u8 CAN1_Mode_Init(u8 tsjw,u8 tbs2,u8 tbs1,u16 brp,u8 mode) { GPIO_InitTypeDef GPIO_InitStructure; CAN_InitTypeDef CAN_InitStructure; CAN_FilterInitTypeDef CAN_FilterInitStructure; #if CAN1_RX0_INT_ENABLE NVIC_InitTypeDef NVIC_InitStructure; #endif RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN1, ENABLE); GPIO_PinRemapConfig(GPIO_Remap1_CAN1,ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//100MHz GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//100MHz GPIO_Init(GPIOA, &GPIO_InitStructure); CAN_InitStructure.CAN_TTCM=DISABLE; CAN_InitStructure.CAN_ABOM=DISABLE; CAN_InitStructure.CAN_AWUM=DISABLE; CAN_InitStructure.CAN_NART=DISABLE; CAN_InitStructure.CAN_RFLM=DISABLE; CAN_InitStructure.CAN_TXFP=DISABLE; CAN_InitStructure.CAN_Mode= CAN_Mode_Normal; CAN_InitStructure.CAN_SJW=tsjw; CAN_InitStructure.CAN_BS1=tbs1; CAN_InitStructure.CAN_BS2=tbs2; CAN_InitStructure.CAN_Prescaler=brp; CAN_Init(CAN1, &CAN_InitStructure); CAN_FilterInitStructure.CAN_FilterNumber=0; CAN_FilterInitStructure.CAN_FilterMode=CAN_FilterMode_IdMask; CAN_FilterInitStructure.CAN_FilterScale=CAN_FilterScale_32bit; CAN_FilterInitStructure.CAN_FilterIdHigh=0x0000; CAN_FilterInitStructure.CAN_FilterIdLow=0x0000; CAN_FilterInitStructure.CAN_FilterMaskIdHigh=0x0000; CAN_FilterInitStructure.CAN_FilterMaskIdLow=0x0000; CAN_FilterInitStructure.CAN_FilterFIFOAssignment=CAN_Filter_FIFO0; CAN_FilterInitStructure.CAN_FilterActivation=ENABLE; CAN_FilterInit(&CAN_FilterInitStructure); #if CAN1_RX0_INT_ENABLE CAN_ITConfig(CAN1,CAN_IT_FMP0,ENABLE); CAN_ITConfig(CAN1,CAN_IT_TME,ENABLE); CAN_ITConfig(CAN1,CAN_IT_BOF,ENABLE); NVIC_InitStructure.NVIC_IRQChannel = USB_LP_CAN1_RX0_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); #endif return 0; } #if CAN1_RX0_INT_ENABLE void USB_LP_CAN1_RX0_IRQHandler(void) { int i=0; CanRxMsg RxMessage; RxMessage.StdId=0x00; RxMessage.ExtId=0x00; RxMessage.IDE=0; RxMessage.RTR=0; RxMessage.FMI=0; for(i=0;i


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3